package admin

import (
	"MBGAdmin/models"
	"github.com/astaxie/beego/orm"
	"strconv"
)

// 菜单控制器
type MenuController struct {
	AuthController
}

// 菜单首页
func (c *MenuController) Get() {
	c.Display("admin/menu/index.html")
}

// 菜单列表获取
func (c *MenuController) GetLists() {
	page, _ := strconv.Atoi(c.GetString("page"))
	limit, _ := strconv.Atoi(c.GetString("limit"))
	o := orm.NewOrm()
	p := o.QueryTable(models.Menus{})
	// 条件筛选
	if name := c.GetString("name"); name != "" {
		p = p.Filter("name__contains", name)
	}
	if level := c.GetString("level"); level != "" {
		p = p.Filter("level", level)
	}
	// 根据page和limit取数据
	var menus []*models.Menus
	_, err := p.Offset((page-1)*limit).Limit(limit).RelatedSel().OrderBy("level", "-order", "top_id").All(&menus)
	count, _ := p.Count()
	if err != nil {
		c.BaseResponse(1, "获取列表失败:"+err.Error())
		return
	}
	// 封装结果
	rsp := make(map[string]interface{})
	rsp["count"] = count
	rsp["lists"] = menus
	c.BaseResponse(0, "获取列表成功", rsp)
}

// 删除菜单
func (c *MenuController) Delete() {
	id, _ := c.GetInt(":id")
	menu := models.Menus{Id: id}
	err := menu.DeleteMenusById()
	if err != nil {
		c.BaseResponse(1, "删除菜单失败："+err.Error())
		return
	}
	c.BaseResponse(0, "删除菜单成功")
}

// 添加菜单页面
func (c *MenuController) CreateView() {
	c.Display("admin/menu/create.html")
}

// 添加菜单
func (c *MenuController) Create() {
	// 解析表单参数
	menu := models.Menus{}
	if err := c.ParseForm(&menu); err != nil {
		c.BaseResponse(1, "解析表单出错："+err.Error())
		return
	}
	// 封装上级菜单
	topId, _ := c.GetInt("top_id")
	menu.Top = &models.Menus{Id: topId}
	// 插入数据库
	if err := menu.AddMenus(); err != nil {
		c.BaseResponse(1, "创建菜单失败："+err.Error())
		return
	}
	c.BaseResponse(0, "创建菜单成功")
}

// 编辑菜单页面
func (c *MenuController) UpdateView() {
	// 解析ID
	id, err := c.GetInt(":id")
	if err != nil {
		c.BaseResponse(1, "解析ID错误,请刷新页面后重试")
		return
	}
	// 根据ID获取menu
	menu := models.Menus{Id: id}
	err = menu.GetMenusById()
	if err != nil {
		c.BaseResponse(1, "ID不存在,请刷新页面后重试")
		return
	}
	c.Data["menu"] = menu
	c.Display("admin/menu/update.html")
}

// 编辑菜单
func (c *MenuController) Update() {
	// 解析表单参数
	menuNew := models.Menus{}
	if err := c.ParseForm(&menuNew); err != nil {
		c.BaseResponse(1, "解析表单出错："+err.Error())
		return
	}
	// 解析ID
	id, err := c.GetInt(":id")
	if err != nil {
		c.BaseResponse(1, "ID解析失败")
		return
	}
	// 根据ID查找数据库是否存在
	menuOld := models.Menus{Id: id}
	err = menuOld.GetMenusById()
	if err != nil {
		c.BaseResponse(1, "ID不存在")
		return
	}
	// 封装修改参数
	menuOld.Top = &models.Menus{}
	menuOld.Top.Id, _ = c.GetInt("top_id")
	menuOld.Name = menuNew.Name
	menuOld.Level = menuNew.Level
	menuOld.Icon = menuNew.Icon
	menuOld.Url = menuNew.Url
	menuOld.Order = menuNew.Order
	// 根据ID修改数据
	err = menuOld.UpdateMenusById()
	if err != nil {
		c.BaseResponse(1, "修改失败"+err.Error())
		return
	}
	c.BaseResponse(0, "修改成功")
}
